package supermarket;
import java.beans.XMLEncoder;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashSet;

public class ServerClient {
    public static ArrayList<Commodity> list = new ArrayList<>();// 商品库存集合
    public static ArrayList<Commodity> buyList = new ArrayList<>();// 购买商品的集合
    public static ArrayList<String> vipList = new ArrayList<>(); // 会员卡号的集合

    static {
        // 初始化会员卡号
        vipList.add("2008");
        vipList.add("2009");
        vipList.add("2010");
        vipList.add("2011");
        vipList.add("2012");
        vipList.add("2013");
        vipList.add("2014");
        vipList.add("2015");
        vipList.add("2016");
        vipList.add("2007");
        vipList.add("2006");
        vipList.add("2005");
        // 初始化库存中的商品
        list.add(new Commodity("1001", "吉百芝麻油", 9.5, "125ml", 200));
        list.add(new Commodity("1002", "雀巢奶香咖啡", 1.5, "13g", 200));
        list.add(new Commodity("1003", "脉动水蜜桃", 7.0, "1.5l", 150));
        list.add(new Commodity("1004", "白沙糖", 2.5, "70g", 170));
        list.add(new Commodity("1005", "桃李熟切片", 6.5, "400g", 101));
        list.add(new Commodity("1006", "白玉黄豆芽", 2.4, "350g", 201));
        list.add(new Commodity("1007", "白玉内酯豆腐", 1.0, "400g", 151));
        list.add(new Commodity("1008", "哇哈哈", 5.5, "600ml", 100));
        list.add(new Commodity("1009", "芬达水", 6.9, "550ml", 180));
        list.add(new Commodity("1010", "脉动水", 4.5, "350ml", 135));
        try {
            XMLEncoder xmlEncoder=new XMLEncoder(new FileOutputStream("C:\\Users\\风之恺\\Desktop\\supermarket.xml"));
            xmlEncoder.writeObject(list);
            xmlEncoder.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }



    // 登录方法.验证是管理员还是收银员登录,如果错误,返回错误标识
    public DataPool doLogin(DataPool datas) {
        if (datas.getUser().getUserName().equals(Flag.MANAGE_USER_NAME)
                && datas.getUser().getPassword().equals(Flag.MANAGE_PASSWORD)) {
            datas.setFlag(Flag.REPERTORY);
            ;
        } else if (datas.getUser().getUserName().equals(Flag.CASHIER_USER_NAME)
                && datas.getUser().getPassword().equals(Flag.CASHIER_PASSWORD)) {
            datas.setFlag(Flag.CASHIER);
            ;
        } else {
            datas.setFlag(Flag.ERROR);
        }
        return datas;
    }

    // 扫描商品号，查看是否有此商品号
    public DataPool scan(DataPool datas) {
        Boolean fag = false;
        for (Commodity com : list) {
            if ((datas.getScan()).equals(com.getGoodNum())) {
                datas.setFlag(Flag.SCAN);
                // 将已购买的商品加入buyList集合之中
                Commodity commodity = new Commodity(com.getGoodNum(), com.getGoodName(), com.getGoodprice(),
                        com.getGoodVolume(), 1);
                buyList.add(commodity);
                // 设置购买商品的集合，为客户端得到商品信息使用
                datas.setBuyList(buyList);
                fag = true;
            }
        }
        if (!fag) {
            datas.setFlag(Flag.ERROR);
        }
        return datas;
    }

    // 修改购买数量,并重置购买集合
    public DataPool modify(DataPool datas) {
        Boolean fag = false;
        // 遍历购买商品集合，查看是否有要被修改的商品
        for (Commodity comd : buyList) {
            if (datas.getCommodity().getGoodNum().equals(comd.getGoodNum())) {
                Commodity commodity = new Commodity(comd.getGoodNum(), comd.getGoodName(), comd.getGoodprice(),
                        comd.getGoodVolume(), datas.getCommodity().getGoodCount());
                // 重新设置集合中对应下标的对象
                buyList.set(buyList.indexOf(comd), commodity);
                datas.setFlag(Flag.MODIFY);
                datas.setBuyList(buyList);
                fag = true;
            }
        }
        if (!fag) {
            datas.setFlag(Flag.ERROR);
        }
        return datas;
    }

    // 结账，返回购买商品的集合
    public DataPool account(DataPool datas) {
        datas.setFlag(Flag.ACCOUNT);
        datas.setBuyList(buyList);
        return datas;
    }

    // 验证vip卡号是否正确
    public DataPool vipCardNum(DataPool datas) {
        Boolean fag = false;
        // 遍历集合
        for (String card : vipList) {
            if (datas.getVipCardNum().equals(card)) {
                datas.setFlag(Flag.VIPNUM);
                datas.setBuyList(buyList);
                fag = true;
            }
        }
        if (!fag) {
            datas.setFlag(Flag.ERROR);
        }
        return datas;
    }

    // 新增商品时，查询此商品编号是否存在
    public DataPool search(DataPool datas) {
        Boolean fag = false;
        for (Commodity com : list) {
            if (datas.getSearch().equals(com.getGoodNum())) {
                datas.setFlag(Flag.ERROR);
                fag = true;
            }
        }
        if (!fag) {
            datas.setFlag(Flag.SEARCH);
        }
        return datas;
    }

    // 增加商品,查找对应的商品号，增加数量
    public DataPool addin(DataPool datas) {
        // 查找增加的商品编号
        Boolean fag = false;
        for (Commodity com : list) {
            if (datas.getCommodity().getGoodNum().equals(com.getGoodNum())) {
                // 得到该商品在集合中的下标
                int index = list.indexOf(com);
                Commodity commodity = new Commodity(com.getGoodNum(), com.getGoodName(), com.getGoodprice(),
                        com.getGoodVolume(), com.getGoodCount() + (datas.getCommodity().getGoodCount()));
                // 重新设置集合中对应下标的对象
                list.set(index, commodity);
                datas.setList(list);
                datas.setFlag(Flag.ADDIN);
                fag = true;
            }
        }
        // 没有此商品编号返回的值
        if (!fag) {
            datas.setList(list);
            datas.setFlag(Flag.NOGOODSNUM);
        }
        return datas;
    }

    // 商品出库的方法，判断出库数量是否小于仓库库存数量
    public DataPool out(DataPool datas) {
        Boolean fag = false;
        for (Commodity com : list) {
            if (datas.getCommodity().getGoodNum().equals(com.getGoodNum())) {
                // 判断出库数量是否小于库存数量
                if (datas.getCommodity().getGoodCount() < com.getGoodCount()) {
                    // 得到该商品在集合中的下标
                    int index = list.indexOf(com);
                    Commodity commodity = new Commodity(com.getGoodNum(), com.getGoodName(), com.getGoodprice(),
                            com.getGoodVolume(), com.getGoodCount() - (datas.getCommodity().getGoodCount()));
                    // 重新设置集合中对应下标的对象
                    list.set(index, commodity);
                    datas.setList(list);
                    datas.setFlag(Flag.OUT);
                    fag = true;
                } else {
                    // 当库存不足时，将此对象传递到客户端
                    datas.setCommodity(com);
                    datas.setFlag(Flag.ERROR);
                    fag = true;
                }
            }
        }
        // 没有此商品编号返回的值
        if (!fag) {
            datas.setList(list);
            datas.setFlag(Flag.NOGOODSNUM);
        }
        return datas;
    }

    // 新增商品种类的方法
    public DataPool newAdd(DataPool datas) {
        list.add(datas.getCommodity());
        datas.setList(list);
        return datas;
    }

    // 查询所有商品
    public DataPool allGoods(DataPool datas) {
        datas.setList(list);
        datas.setFlag(Flag.ALLGOODS);
        return datas;
    }

    // 按查询编号进行查找
    public DataPool oneGoods(DataPool datas) {
        for (Commodity com : list) {
            if (datas.getOneGoods().equals(com.getGoodNum())) {
                datas.setCommodity(com);
            }
        }
        return datas;
    }
    //清楚购买集合中的所有物品
    public DataPool clear(DataPool datas){
        buyList.clear();
        datas.setFlag(Flag.CLEAR);
        return datas;
    }
}
